home *** CD-ROM | disk | FTP | other *** search
Text File | 1998-01-23 | 4.8 KB | 164 lines | [TEXT/CWIE] |
- /******************** ***********************/
- //
- // Player PRO 4.6 - DRIVER SOURCE CODE -
- //
- // Library Version 4.6
- //
- // To use with MAD Library for Mac: Symantec, CodeWarrior and MPW
- //
- // Antoine ROSSET
- // 16 Tranchees
- // 1206 GENEVA
- // SWITZERLAND
- //
- // COPYRIGHT ANTOINE ROSSET 1996, 1997, 1998
- //
- // Thank you for your interest in PlayerPRO !
- //
- // FAX: (+41 22) 346 11 97
- // PHONE: (+41 79) 203 74 62
- // Internet: rosset@dial.eunet.ch or RossetAntoine@bluewin.ch
- //
- /******************** ***********************/
-
- #include "RDriver.h"
- #include "RDriverInt.h"
-
- void MADTickLoopFill8( Channel *curVoice, long *ASCBuffer1, long *ASCBuffer2, long size, short left, short right)
- {
- size++;
- while( size-- > 0)
- {
- *ASCBuffer1 += left; ASCBuffer1 += 2;
- *ASCBuffer2 += right; ASCBuffer2 += 2;
- }
- curVoice->prevPtr = 0L;
- }
-
- void MADTickLoop8( long size, Channel *curVoice, long *ASCBuffer1, long *ASCBuffer2, MADDriverRec *intDriver)
- {
- long tLong, chnVol2, chnVol, LRVol = intDriver->LeftRight[ curVoice->ID];
-
- chnVol2 = ((curVoice->curPrevVol * intDriver->VolExt[ curVoice->ID] * LRVol)/ REDUCEVOLUME);
- LRVol = 100 - LRVol;
- chnVol = ((curVoice->curPrevVol * intDriver->VolExt[ curVoice->ID] * LRVol)/ REDUCEVOLUME);
-
- while( size-- > 0)
- {
- if( curVoice->curLevel > 0) curVoice->curLevel--;
- tLong = (curVoice->curLastWord * curVoice->curLevel) >> TICKREMOVESIZELEFT;
-
- // Double ASCBUFFER
-
- *ASCBuffer1 += (chnVol * tLong) >> 6; ASCBuffer1 += 2;
- *ASCBuffer2 += (chnVol2 * tLong) >> 6; ASCBuffer2 += 2;
- }
- }
-
- void MADTickRemoverStart8( Channel *curVoice, long *ASCBuffer1, long *ASCBuffer2, MADDriverRec *intDriver)
- {
- long i = intDriver->ASCBUFFER;
- long curDoVol = DoVol( curVoice);
-
- if( curVoice->prevPtr != curVoice->begPtr ||
- (curVoice->curPtr >= curVoice->maxPtr && curVoice->loopSize == 0) ||
- curVoice->prevVol != curDoVol)
- {
- Boolean alreadyVol = false;
-
- if( curVoice->prevVol != curDoVol && curVoice->prevPtr == curVoice->begPtr)
- {
- long diff = curVoice->prevVol - curDoVol;
-
- if( diff < 0)
- {
- curVoice->curPrevVol = curDoVol;
-
- if( curDoVol)
- curVoice->lastWord = (curVoice->lastWord * diff) / curDoVol;
- else curVoice->lastWord = 0;
- }
- else
- {
- curVoice->curPrevVol = curVoice->prevVol;
-
- if( curVoice->prevVol)
- curVoice->lastWord = (curVoice->lastWord * diff) / curVoice->prevVol;
- else curVoice->lastWord = 0;
- }
-
- alreadyVol = true;
- }
-
- if( curVoice->lastWord != 0)
- {
- curVoice->curLevel = TICKREMOVESIZE;
- curVoice->curLastWord = curVoice->lastWord;
- if( !alreadyVol) curVoice->curPrevVol = curVoice->prevVol;
- curVoice->lastWord = 0;
- }
-
- curVoice->prevPtr = curVoice->begPtr;
- curVoice->prevVol = curDoVol;
- }
-
- if( curVoice->curLevel > 0) MADTickLoop8( i, curVoice, ASCBuffer1, ASCBuffer2, intDriver);
- }
-
- void MADTickRemoverLoop16( long size, Channel *curVoice, long *ASCBuffer1, long *ASCBuffer2, MADDriverRec *intDriver, long diff)
- {
- if( curVoice->loopSize > intDriver->ASCBUFFER)
- {
- long LRVol, ii = size+1, tLong;
- long chnVol2, chnVol;
-
- curVoice->curLevel = TICKREMOVESIZE;
- curVoice->curLastWord = diff;
- curVoice->curPrevVol = curVoice->prevVol;
- curVoice->prevPtr = curVoice->begPtr;
- curVoice->prevVol = DoVol( curVoice);
-
- LRVol = intDriver->LeftRight[ curVoice->ID];
- chnVol2 = ((curVoice->curPrevVol * intDriver->VolExt[ curVoice->ID] * LRVol)/ REDUCEVOLUME);
- LRVol = 100 - LRVol;
- chnVol = ((curVoice->curPrevVol * intDriver->VolExt[ curVoice->ID] * LRVol)/ REDUCEVOLUME);
-
- while( ii-- > 0)
- {
- if( curVoice->curLevel > 0) curVoice->curLevel--;
- tLong = (curVoice->curLastWord * curVoice->curLevel) >> TICKREMOVESIZELEFT;
-
- *ASCBuffer1 += (chnVol * tLong) >> 6; ASCBuffer1 += 2;
- *ASCBuffer2 += (chnVol2 * tLong) >> 6; ASCBuffer2 += 2;
- }
- }
- }
-
- void MADTickRemoverLoop8( long size, Channel *curVoice, long *ASCBuffer1, long *ASCBuffer2, MADDriverRec *intDriver, long diff)
- {
- if( curVoice->loopSize > intDriver->ASCBUFFER)
- {
- long LRVol, ii = size+1, tLong;
- long chnVol2, chnVol;
-
- curVoice->curLevel = TICKREMOVESIZE;
- curVoice->curLastWord = diff << 8;
- curVoice->curPrevVol = curVoice->prevVol;
- curVoice->prevPtr = curVoice->begPtr;
- curVoice->prevVol = DoVol( curVoice);
-
- LRVol = intDriver->LeftRight[ curVoice->ID];
- chnVol2 = ((curVoice->curPrevVol * intDriver->VolExt[ curVoice->ID] * LRVol)/ REDUCEVOLUME);
- LRVol = 100 - LRVol;
- chnVol = ((curVoice->curPrevVol * intDriver->VolExt[ curVoice->ID] * LRVol)/ REDUCEVOLUME);
-
- while( ii-- > 0)
- {
- if( curVoice->curLevel > 0) curVoice->curLevel--;
- tLong = (curVoice->curLastWord * curVoice->curLevel) >> TICKREMOVESIZELEFT;
-
- *ASCBuffer1 += (chnVol * tLong) >> 6; ASCBuffer1 += 2;
- *ASCBuffer2 += (chnVol2 * tLong) >> 6; ASCBuffer2 += 2;
- }
- }
- }